local mtbl = {"haha", "xixi", "heihei"}
-----------------------------------------------------------------------------------------
-- -- 无状态迭代器
-- function myIter()
--     local iter = function(t, i)
--         i = i + 1
--         if i > #t then return nil end
--         return i, t[i]
--     end
--     return iter, mtbl, 0
-- end

-- for k, v in myIter() do
--     print(k .. " : " .. v)
-- end
-----------------------------------------------------------------------------------------
-- -- 有状态的迭代器
-- function myStateIter()
--     local i = 0
--     return function(...)
--         i = i + 1
--         if i > #mtbl then return nil end
--         -- for i = 1, select("#", ...) do
--         --     if select(i, ...) then
--         --         print(i .. " : " .. select(i, ...))
--         --     else
--         --         print(i .. " : " .. type(select(i, ...)))
--         --     end
--         -- end
--         return mtbl[i]
--     end
-- end

-- for v in myStateIter(mtbl) do
--     print(v)
-- end
-----------------------------------------------------------------------------------------
-- 是否使用相同迭代器
function iter_to_test_same()
    local iter = function(t, i)
        i = i + 1
        if i > #t then return nil end
        return i, t[i]
    end
    return iter, mtbl, 0
end

local it_1 = {iter_to_test_same()}
local it_2 = iter_to_test_same()

for k, v in it_1 do
    print(v)
end